#include <stdio.h>
#include <unistd.h>
#include <signal.h>

void signal_printf(sigset_t* signo)
{
  int i=1;
  for(;i<=31;i++)
  {
    if(sigismember(signo,i))
    {
      printf("%d ",1);
    }
    else 
    {
      printf("%d ",0);
    }
  }
  printf("\n");
}

void hander(int signo)
{
  printf("%d阻塞结束\n",signo);
}
int main()
{
  sigset_t set,oset;
  sigemptyset(&set);
  sigemptyset(&oset);
  sigaddset(&set,2);
  sigprocmask(SIG_SETMASK,&set,&oset);//将2阻塞

  signal(2,hander);//捕获2信号

  sigset_t pending;
  int count=0;
  while(1)
  {
    sigpending(&pending);//获取未决信号集
    //每隔一秒打印未决信号集
    signal_printf(&pending);
    sleep(1);
    count++;
    if(count==10)
    {
      //十秒后解除阻塞
      sigprocmask(SIG_SETMASK,&oset,NULL); 
    }
  }
  return 0;
}
